home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / comm2 / mmtsnd60.lha / REXX / MM_AutoSend.rexx
OS/2 REXX Batch file  |  1996-04-26  |  6KB  |  266 lines

  1. /*
  2. ** $VER: MM_AutoSend 0.60 (12.04.96)
  3. **
  4. ** Written by Paolo Carotenuto
  5. **
  6. */
  7. DROP MM.
  8. PARSE UPPER ARG MM.Group
  9. MM.PathCfg='MM:Config/'
  10. MM.PrgName='MM_AutoSend v0.60'
  11. MM.Copyright='(C) 1994-96 By Paolo Carotenuto'
  12. MM.LogLevel=2
  13. IF MM.Group='?' THEN;DO
  14. SAY ''
  15. SAY MM.PrgName MM.Copyright
  16. SAY ''
  17. SAY 'Usage:'
  18. SAY 'Rx MM_AutoSend [<Group> <Group>...]'
  19. SAY ''
  20. EXIT 0
  21. END
  22. ADDRESS 'MAILMANAGER'
  23. CALL WriteLog(MM.PrgName 'Started')
  24. CALL ReadConfig()
  25. IF MM.Group ~='' THEN;DO
  26. DO WHILE MM.Group ~=''
  27. PARSE VAR MM.Group Gruppo MM.Group
  28. MM_SearchInStem MM.Aree Tag Gruppo STR
  29. IF Tag.Count>0 THEN;DO
  30. CALL ProcessaArea(Tag.0)
  31. CALL WriteLog('End')
  32. END
  33. ELSE;DO
  34. CALL WriteLog('*** Error: Group ['Gruppo'] Not Configured')
  35. END
  36. END
  37. END
  38. ELSE;DO
  39. DO i=0 FOR MM.Aree.Count
  40. CALL ProcessaArea(MM.Aree.i)
  41. CALL WriteLog('End')
  42. END
  43. END
  44. IF MM.Esporta.Count>0 THEN;DO
  45. DO i=0 FOR MM.Esporta.Count
  46. MM_Export MM.Esporta.i
  47. END
  48. END
  49. CALL WriteLog(MM.PrgName 'Ended')
  50. EXIT
  51. ProcessaArea:PROCEDURE EXPOSE MM.
  52. PARSE ARG Tag
  53. CALL WriteLog('Processing: ['Tag']')
  54. IF MM.File.Tag='' THEN;DO
  55. CALL WriteLog('  *** Error: Keyword "FILE" Not Configured')
  56. RETURN
  57. END
  58. IF MM.To.Tag.Count=0 THEN;DO
  59. CALL WriteLog('  *** Error: Keyword "TO" Not Configured')
  60. RETURN
  61. END
  62. PARSE VAR MM.File.Tag PathName Flags .
  63. IF ~EXISTS(PathName) THEN;DO
  64. CALL WriteLog('  File: ['PathName'] Not Found - Skiping!')
  65. RETURN
  66. END
  67. CALL WriteLog('  File: ['PathName'] Found...')
  68. FullSize=0
  69. IF MM.Type.Tag ~='' THEN;DO
  70. IF UPPER(MM.Type.Tag)='CP' THEN;DO
  71. DO x=0 FOR MM.To.Tag.Count
  72. PARSE VAR MM.To.Tag.x ToName Area .
  73. CrossPosted='* CrossPosted in 'Area
  74. MM_AddToStem MM.Body 'CrossPosted'
  75. END
  76. MM_AddToStem MM.Body 'MM.Null'
  77. END
  78. ELSE;DO
  79. DO x=0 FOR MM.To.Tag.Count
  80. ToAddress=''
  81. PARSE VAR MM.To.Tag.x ToName Area Export ToAddress .
  82. IF ToAddress ~='' THEN;DO
  83. CarbonCopy='* CarbonCopy to 'TRANSLATE(ToName,' ','_')' ('ToAddress')'
  84. MM_AddToStem MM.Body 'CarbonCopy'
  85. END
  86. END
  87. MM_AddToStem MM.Body 'MM.Null'
  88. END
  89. END
  90. IF EXISTS(MM.Header.Tag) THEN;DO
  91. CALL WriteLog('  Reading Header: ['MM.Header.Tag']')
  92. MM_ReadStem MM.Header.Tag MM.Body APPEND
  93. FullSize=FullSize+WORD(STATEF(MM.Header.Tag),2)
  94. END
  95. CALL WriteLog('  Reading File  : ['PathName']')
  96. MM_ReadStem PathName MM.Body APPEND
  97. FullSize=FullSize+WORD(STATEF(PathName),2)
  98. IF EXISTS(MM.Footer.Tag) THEN;DO
  99. CALL WriteLog('  Reading Footer: ['MM.Footer.Tag']')
  100. MM_ReadStem MM.Footer.Tag MM.Body APPEND
  101. FullSize=FullSize+WORD(STATEF(MM.Footer.Tag),2)
  102. END
  103. IF MM.From.Tag='' THEN MM.From.Tag=MM.Sysop
  104. IF MM.Subj.Tag='' THEN MM.Subj.Tag='Nothing'
  105. IF MM.Origin.Tag ~='' THEN Write.Origin=MM.Origin.Tag
  106. Write.From=MM.From.Tag
  107. Write.Subj=MM.Subj.Tag
  108. Write.Tear=MM.PrgName
  109. MM.Part=1
  110. IF MM.Size.Tag ~=0 THEN;DO
  111. MM.Testo.Count=0
  112. Lun=0
  113. Size=MM.Size.Tag*990
  114. IF FullSize>Size THEN;DO
  115. DO i=0 FOR MM.Body.Count
  116. Len=LENGTH(MM.Body.i)
  117. Lun=Lun+Len
  118. Linea=MM.Body.i
  119. MM_AddToStem MM.Testo 'Linea'
  120. IF Lun>=Size THEN;DO
  121. MM_AddToStem MM.Testo 'MM.Null'
  122. MM_AddToStem MM.Testo 'MM.EndLine'
  123. MM_AddToStem MM.Testo 'MM.Null'
  124. MM_WriteStem 'T:MM_AutoSend.'MM.Part MM.Testo
  125. MM.Part=MM.Part+1
  126. MM.Testo.Count=0
  127. Lun=0
  128. MM_AddToStem MM.Testo 'MM.Null'
  129. MM_AddToStem MM.Testo 'MM.StartLine'
  130. MM_AddToStem MM.Testo 'MM.Null'
  131. END
  132. END
  133. IF MM.Testo.Count>0 THEN MM_WriteStem 'T:MM_AutoSend.'MM.Part MM.Testo
  134. END
  135. ELSE MM_WriteStem 'T:MM_AutoSend.'MM.Part MM.Body
  136. END
  137. DO j=0 FOR MM.To.Tag.Count
  138. ToName=''
  139. ToAddress=''
  140. FromAddress=''
  141. PARSE VAR MM.To.Tag.j ToName Area Export ToAddress FromAddress .
  142. MM_GetAreaInfo Area Info
  143. IF Rc=4 THEN;DO
  144. CALL WriteLog('    *** Error: Area: ['Area'] Not Found...')
  145. ITERATE
  146. END
  147. Write.To=ToName
  148. IF Info.Type='MAIL' THEN;DO
  149. IF ToAddress='' THEN;DO
  150. CALL WriteLog('    *** Error: No Address Found For Area: ['Area']')
  151. ITERATE
  152. END
  153. IF UPPER(ToName)='SYSOP' THEN;DO
  154. MM_GetNodeListNode ToAddress xInfo
  155. IF Rc=0 THEN;DO
  156. ToName=xInfo.SysOp
  157. Write.To=ToName
  158. END
  159. ELSE;DO
  160. CALL WriteLog('    *** Error: Address ['ToAddress'] Not Found')
  161. ITERATE
  162. END
  163. END
  164. Write.ToAddr=ToAddress
  165. Write.FromAddr=FromAddress
  166. Write.Flags='PVT'
  167. IF Write.FromAddr='' THEN Write.FromAddr=Info.Addr
  168. IF MM.Status.Count=FALSE THEN;DO
  169. MM.Status.Count=TRUE
  170. CALL AddLine('')
  171. CALL AddLine('-+- 'MM.PrgName MM.Copyright)
  172. CALL AddLine('')
  173. MM_WriteStem 'T:MM_AutoSend.'MM.Part MM.Testo APPEND
  174. END
  175. CALL WriteLog('    Send NetMail to: ['ToName'] At ['ToAddress']')
  176. END
  177. ELSE;DO
  178. CALL WriteLog('    Send Message to: ['ToName'] in Area ['Area']')
  179. END
  180. DO h=1 TO MM.Part
  181. Write.File='T:MM_AutoSend.'h
  182. MM_WriteMsg Area Write
  183. END
  184. IF UPPER(Export)='E' THEN;DO
  185. MM_SearchInStem MM.Esporta Resp Area STR
  186. IF Resp.Count=0 THEN;DO
  187. MM_AddToStem MM.Esporta 'Area'
  188. END
  189. END
  190. END
  191. DO h=1 TO MM.Part
  192. MM_DeleteFile 'T:MM_AutoSend.'h
  193. END
  194. IF UPPER(Flags)='KILL' THEN;DO
  195. MM_DeleteFile PathName
  196. CALL WriteLog('  Delete File: ['PathName']')
  197. END
  198. MM.Body.Count=0
  199. MM.Status.Count=FALSE
  200. MM.Esporta.count
  201. RETURN
  202. AddLine:PROCEDURE EXPOSE MM.
  203. PARSE ARG Line
  204. Cont=MM.Testo.Count
  205. MM.Testo.Cont=Line
  206. MM.Testo.Count=Cont+1
  207. RETURN
  208. ReadConfig:PROCEDURE EXPOSE MM.
  209. MM_ReadStem MM.PathCfg||'MM_AutoSend.Cfg' Config
  210. IF Rc ~=0 THEN;DO
  211. CALL WriteLog('*** Error: Can not open config "'MM.PathCfg'MM_AutoSend.cfg"')
  212. EXIT 10
  213. END
  214. IF ~SHOW('l',"rexxsupport.library") THEN;DO
  215. IF ~ADDLIB("rexxsupport.library",0,-30,0) THEN;DO
  216. SAY "Could not open rexxsupport.library"
  217. EXIT 10
  218. END
  219. END
  220. MM.Null=''
  221. MM.EndLine=''
  222. MM.StartLine=''
  223. MM.Aree.Count=0
  224. MM.Body.Count=0
  225. MM.Esporta.Count=0
  226. MM.Testo.Count=0
  227. MM.Status.Count=FALSE
  228. DO l=0 FOR Config.Count
  229. PARSE VAR Config.l Keyword Dato
  230. IF LEFT(Keyword,1)=';'|Keyword='' THEN ITERATE
  231. Keyword=UPPER(Keyword)
  232. IF Keyword='#END_MESSAGE' THEN MM.EndLine= Dato
  233. IF Keyword='#START_MESSAGE' THEN MM.StartLine= Dato
  234. IF Keyword='#GROUP' THEN;DO
  235. Tag=UPPER(STRIP(Dato))
  236. MM_AddToStem MM.Aree 'Tag'
  237. MM.File.Tag=''
  238. MM.From.Tag=''
  239. MM.Subj.Tag=''
  240. MM.Type.Tag=''
  241. MM.Origin.Tag=''
  242. MM.Header.Tag=' '
  243. MM.Footer.Tag=' '
  244. MM.Size.Tag=0
  245. MM.To.Tag.Count=0
  246. END
  247. Dato=STRIP(Dato)
  248. SELECT
  249. WHEN Keyword='FROM' THEN MM.From.Tag= Dato
  250. WHEN Keyword='SUBJ' THEN MM.Subj.Tag= Dato
  251. WHEN Keyword='ORIGIN' THEN MM.Origin.Tag= Dato
  252. WHEN Keyword='HEADER' THEN MM.Header.Tag= Dato
  253. WHEN Keyword='FOOTER' THEN MM.Footer.Tag= Dato
  254. WHEN Keyword='FILE' THEN MM.File.Tag= Dato
  255. WHEN Keyword='TYPE' THEN MM.Type.Tag= Dato
  256. WHEN Keyword='SIZE' THEN MM.Size.Tag= Dato
  257. WHEN Keyword='TO' THEN MM_AddToStem 'MM.To.'Tag 'Dato'
  258. OTHERWISE
  259. END
  260. END
  261. MM_GetSysop 'MM.Sysop'
  262. RETURN
  263. WriteLog:PROCEDURE EXPOSE MM.
  264. PARSE ARG Testo
  265. MM_WriteLog 'Testo' MM.LogLevel
  266. RETURN